import axios from "axios";
import Vue from "vue";
import qs from "querystring";
import {errorAlert} from "../utils/alert"
import store from "../store"
import router from "../router"

// 判断环境
if (process.env.NODE_ENV == "development") {
    Vue.prototype.$pre = "http://localhost:3000"
} else {
    Vue.prototype.$pre = ""
}

//请求拦截
axios.interceptors.request.use(req => {
    // 每次请求都要做的逻辑
    // 如果请求不是登录 就需要携带响应头
    if(req.url !== 'api/userlogin'){
        req.headers.authorization = store.getters.userInfo.token;
    }
    return req
})

// 响应拦截
axios.interceptors.response.use(res => {
    // 打印数据 
    console.group("本次请求地址" + res.config.url);
    console.log(res);
    console.groupEnd()

    // 统一处理错误
    if(res.data.code!==200){
        errorAlert(res.data.msg)
    }

    // 掉线处理
    if(res.data.msg === '登录已过期或访问权限受限'){
    // 清空
      store.dispatch("changeUserInfo",{});
    //  跳转到登录
      router.replace('/login')   
    }
    return res
})


/* get 方式
 * @param {*} url :请求地址
 * @param {*} params 请求参数，默认是{}
 * @returns axios
 * @eg: const reqLogin=(user)=>get("/login",user)
 */
export const get = (url,params = {}) => {
    return axios({
        url,
        method:"get",
        params
    })
}

/* post 方式 
 * @param {*} url :请求地址
 * @param {*} data 请求参数，默认是{}
 * @param {*} isFile 判断是否有文件，如果有文件，就传true,没有不用传。
 * @returns axios
 * @eg: const reqLogin=(user)=>post("/login",user)
 */

export const post = (url,data = {}, isFile=false ) => {
    let params = null;
    if(isFile){
        // 有文件
        params = new FormData();
        for(let key in data){
            params.append(key,data[key])
        }
    }else{
        // 无文件
        params = qs.stringify(data);
    }
    return axios({
        url,
        method:"post",
        data:params
    })
}